package com.eunion.web.admin.repository;

import java.util.List;

import org.springframework.data.jpa.repository.Query;

import com.eunion.core.common.KvVo;
import com.eunion.core.common.ZtreeStringVo;
import com.eunion.web.admin.entity.AdminAuth;
import com.eunion.web.common.base.BaseRepository;

/**
 * @see AdminAuth .
 * 
 */
public interface AdminAuthRepository extends BaseRepository<AdminAuth, String> {

	/**
	 * 查询该权限代码或权限名字是否有已经已经被其它权限使用.
	 * @param parentAuthCode 父权限代码
	 * @return 符合条件的查询列表.
	 */
	List<AdminAuth> findByParentAuthCode(String parentAuthCode);

	/**
	 * 查询该权限代码或权限名字是否有已经使用.
	 * @param authCode 权限代码
	 * @param authName 权限名字
	 * @return 符合条件的查询列表.
	 */
	List<AdminAuth> findByAuthCodeOrAuthName(String authCode, String authName);

	/**
	 * 查询现在的权限列表.
	 * @return 返回权限列表.
	 */
	@Query(value = "SELECT new com.eunion.core.common.KvVo(authCode,authName) FROM AdminAuth u where u.status=1 order by u.authSeq asc ")
	List<KvVo> findAllAuths();

	/**
	 * 查询现在的权限列表供ztree使用.
	 * @return 返回权限列表.
	 */
	@Query(value = "SELECT new com.eunion.core.common.ZtreeStringVo(authCode,parentAuthCode,authName,status) FROM AdminAuth u order by u.authSeq asc ")
	List<ZtreeStringVo> findAllAuthsForZtree();

	/**
	 * 根据角色代码查询下面的权限代码.
	 * @param roleCodes 角色代码
	 * @return 权限代码
	 */
	@Query(value = "select auth_code from admin_auth where status = 1 and auth_code in(select auth_code from admin_role_auth where role_code in ?1) order by auth_seq asc ", nativeQuery = true)
	List<String> findAuthsByRoleCodes(List<String> roleCodes);

	/**
	 * 获取所有的权限代码，用户给管理员赋权限.
	 */
	@Query(value = "select auth_code from admin_auth where status = 1 ", nativeQuery = true)
	List<String> findAuths();
}
